package com.prothink.threadproject.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @author mayanping
 * @title: CacheUtil
 * @projectName thread-admin-demo
 * @description: 使用Redis缓存工具类
 * @date 2024/9/2414:21
 */
@Component
//22
public class CacheUitl {

    @Autowired
    private static RedisUtil redisUtil;

    /**
     * 添加数据到缓存中
     * @param key 键
     * @param value 值
     * @param timeout 超时时间，单位为秒
     */
    public static void putValue(String key, Object value, long timeout) {
        redisUtil.setValue(key, value.toString());  // 将对象转为字符串存储
        redisUtil.expire(key, timeout, TimeUnit.SECONDS);  // 设置缓存过期时间
    }

    /**
     * 获取缓存中的数据
     * @param key 键
     * @return 缓存的值
     */
    public static Object getValue(String key) {
        return redisUtil.getValue(key);
    }

    /**
     * 清除缓存中的所有数据
     */
    public void clearCache() {
        // 根据 Redis 不同的缓存策略，这里可以考虑使用 keys() + delete() 来清除缓存。
        Set<String> keys = redisUtil.keys("*");
        if (keys != null && !keys.isEmpty()) {
            redisUtil.delete(keys.toArray(new String[0]));
        }
    }

    /**
     * 删除指定的缓存
     * @param key 键
     */
    public void deleteValue(String key) {
        redisUtil.delete(key);
    }

    /**
     * 判断缓存中是否存在指定的键
     * @param key 键
     * @return 存在返回true，否则返回false
     */
    public boolean hasKey(String key) {
        return redisUtil.hasKey(key);
    }
}
